# Title: euclid                     		Filename: euclid.s
# Author: Vivanco García Joel				                   Date: 15 / Mar / 2017
# Description: Maximo comun divisior
# Input: -
# Output:

@ euclid.s
@ GCD algorithm (example taken from Knuth TA0CP, p.9)

@ r1 Mantiene el primer valor 
@ r0 Mantien el segundo

.section        .data
vals:
    .long 6099, 2166
.section        .text
.globl  _start
##################COMIENZA LA EJECUCION######################
_start:
    ldr r2, =vals             @ Hacemos r1 punto de inicio del vals
    ldr r1, [r2]              @ Cargamos el primer numero en r2
    ldr r0, [r2, #4]          @ Cargamos el segundo numero en r0
    
gcd:
    cmp r0, r1                @ Comparamos r0 y r1
    subgt r0, r0, r1          @ Si r0 > r1, r0 = r0 - r1
    sublt r1, r1, r0          @ Si r0 < r1, r1 = r1 - r0
    bne gcd                   @ Si r0 != r1, repetir
    
    mov     r7, $1            @ Preparar para salir
    swi     0                 @ Despertar kernel
 ###################Final del Codigo##################################
.end
